// import Taro from '@tarojs/taro'
// import qs from 'qs'
// import { BASE_URL, HTTP_ERROR } from "../app.config";
//
// /**
//  * 检查http状态值
//  * @param response
//  * @returns {*}
//  */
// function checkHttpStatus(response: API.Response) {
//     Taro.stopPullDownRefresh();
//
//     Taro.hideNavigationBarLoading();
//
//     if (response.statusCode >= 200 && response.statusCode < 300) {
//         return response.data
//     } else if (response.statusCode == 400) {
//
//     }
//     const message = HTTP_ERROR[response.statusCode] || `ERROR CODE: ${response.statusCode}`
//     const error: any = new Error(message);
//     error.data = response.data;
//     error.text = message;
//     error.code = response.statusCode;
//     throw  error
// }
//
// /**
//  * 检查返回值是否正常
//  */
// function checkSuccess(data: any) {
//     if (data instanceof ArrayBuffer && typeof data === 'string') {
//         return data
//     }
//
//     if (
//         typeof data.code === 'number' &&
//         data.code === 200
//     ) {
//         return data
//     }
//     const message = data.message || '服务器异常';
//     const error: any = new Error(message);
//     error.data = data;
//     error.text = data;
//     error.code = data.code;
//     throw error
// }
//
// /**
//  * 请求错误处理
//
//  */
// function throwError(err) {
//     Taro.hideNavigationBarLoading();
//     Taro.hideNavigationBarLoading();
//     const error: any = new Error(err.errMsg || '服务器正在维护中!');
//     error.code = 500;
//     throw error;
//
// }
//
// export default {
//     request(options: any, method?: string) {
//         const {url} = options;
//         Taro.showNavigationBarLoading();
//         return Taro.request({
//             ...options,
//             method: method || 'GET',
//             url: `${BASE_URL}${url}`,
//             header: {
//                 ...options.header
//             },
//         }).then(checkHttpStatus)
//             .then((res) => {
//                 return checkSuccess(res)
//             })
//             .catch(error => {
//
//                 throwError(error)
//             })
//
//     },
//     get(options: { url: string, data?: object }) {
//         return this.request({
//             ...options
//         })
//     },
//     post(options: any) {
//         return this.request({
//             ...options,
//             data: qs.stringify(options.data)
//         }, 'POST')
//     }
// }

// import Taro from '@tarojs/taro-h5';
import { BASE_URL, CONTENT_TYPE, HTTP_ERROR, HTTP_STATUS, PAGE_URLS, RESPONSE_MODEL, TOKEN_KEY } from "../app.config";
import { CommonFunction } from "./common";
import Taro from "@tarojs/taro";

export default {
    baseOptions(params) {
        let { options = { method: 'GET', url: '', data: {}, contentType: '' } } = params;
        // const option = {
        //     url: url.indexOf('http') !== -1 ? url : BASE_URL + url,
        //     data: data,
        //     method: method,
        //     header: {
        //         'content-type': contentType,
        //         'Authorization': Taro.getStorageSync(TOKEN_KEY)
        //     },
        //     success(res) {
        //         console.log('res', res);
        //         if (res.statusCode === HTTP_STATUS.NOT_FOUND) {
        //             return CommonFunction.logError('api', '请求资源不存在');
        //         } else if (res.statusCode === HTTP_STATUS.BAD_GATEWAY) {
        //             return CommonFunction.logError('api', '服务端出现了问题');
        //         } else if (res.statusCode === HTTP_STATUS.FORBIDDEN) {
        //             Taro.setStorageSync(TOKEN_KEY, '');
        //             let path = CommonFunction.getCurrentPageUrl();
        //             if (path !== 'pages/login/login') {
        //                 Taro.navigateTo({
        //                     url: '/pages/login/login'
        //                 });
        //             }
        //             return CommonFunction.logError('api', '没有权限访问');
        //         } else if (res.statusCode === HTTP_STATUS.AUTHENTICATE) {
        //             Taro.setStorageSync(TOKEN_KEY, '');
        //             let path = CommonFunction.getCurrentPageUrl();
        //             if (path !== 'pages/login/login') {
        //                 Taro.navigateTo({
        //                     url: '/pages/login/login'
        //                 });
        //             }
        //             return CommonFunction.logError('api', '需要鉴权');
        //         } else if (res.statusCode === HTTP_STATUS.SUCCESS) {
        //             return res.data;
        //         }
        //     },
        //     error(e) {
        //         CommonFunction.logError('api', '请求接口出现问题', e);
        //     }
        // };
        return Taro.request({
            url: BASE_URL + options.url,
            data: {
                ...options.data,
            },
            header: {
                'Content-Type': options.contentType || CONTENT_TYPE,
            },
            method: options.method.toUpperCase(),
        }).then(res => {
            // const { statusCode, data } = res;
            // if (statusCode >= 200 && statusCode < 300) {
                // if (!noConsole) {
                //     console.log(
                //         `${new Date().toLocaleString()}【 M=${options.url} 】【接口响应：】`,
                //         res.data
                //     );
                // }
                // if (data.status !== 'ok') {
                //     Taro.showToast({
                //         title: `${res.data.error.message}~` || res.data.error.code,
                //         icon: 'none',
                //         mask: true,
                //     });
                // }
            //     return data;
            // } else {
            //     throw new Error(`网络请求错误，状态码${statusCode}`);
            // }
                if (res[RESPONSE_MODEL.RES_CODE] === HTTP_STATUS.NOT_FOUND) {
                    return CommonFunction.logError('api', HTTP_ERROR['404']);
                } else if (res[RESPONSE_MODEL.RES_CODE] === HTTP_STATUS.BAD_GATEWAY) {
                    return CommonFunction.logError('api', HTTP_ERROR['502']);
                } else if (res[RESPONSE_MODEL.RES_CODE] === HTTP_STATUS.FORBIDDEN) {
                    Taro.setStorageSync(TOKEN_KEY, '');
                    let path = CommonFunction.getCurrentPageUrl();
                    if (path !== PAGE_URLS.LOGIN) {
                        Taro.navigateTo({
                            url: PAGE_URLS.LOGIN
                        });
                    }
                    return CommonFunction.logError('api', HTTP_ERROR['403']);
                } else if (res[RESPONSE_MODEL.RES_CODE] === HTTP_STATUS.AUTHENTICATE) {
                    Taro.setStorageSync(TOKEN_KEY, '');
                    let path = CommonFunction.getCurrentPageUrl();
                    if (path !== PAGE_URLS.LOGIN) {
                        Taro.navigateTo({
                            url: PAGE_URLS.LOGIN
                        });
                    }
                    return CommonFunction.logError('api', HTTP_ERROR['401']);
                } else if (res[RESPONSE_MODEL.RES_CODE] === HTTP_STATUS.SUCCESS) {
                    return res[RESPONSE_MODEL.RES_DATA];
                }
        });
    },
    get(url, data = '', contentType?) {
        let options = { url, data, contentType };
        options['method'] = 'GET';
        return this.baseOptions({
            options: options
        });
    },
    post: function (url, data, contentType?) {
        let options = { url, data, contentType };
        options['method'] = 'POST';
        return this.baseOptions({
            options: options
        });
    },
    put(url, data = '', contentType?) {
        let options = { url, data, contentType };
        options['method'] = 'PUT';
        return this.baseOptions({
            options: options
        });
    },
    delete(url, data = '', contentType?) {
        let options = { url, data, contentType };
        options['method'] = 'DELETE';
        return this.baseOptions({
            options: options
        });
    }
};
